package com.yun.config;

import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import com.yun.unit.Code;
import com.yun.unit.R;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@ControllerAdvice//controller\RestController 出现异常可以去处理
public class MyExceptionHandler {
    //MethodArgumentNotValidException 数据校验失败时会抛出的异常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public R valid(MethodArgumentNotValidException e){
        //创建一个map集合 用于存放错误信息
        Map<String,String> map = new HashMap();
        //获取错误信息
        List<FieldError> fieldErrors = e.getFieldErrors();
        for (FieldError f : fieldErrors){
            //获取错误字段和错误信息
            map.put(f.getField(),f.getDefaultMessage());
        }
        e.printStackTrace();
        return new R(Code.exception_err,"参数校验失败",map);
    }
    @ExceptionHandler(MySQLIntegrityConstraintViolationException.class)
    @ResponseBody
    public R valid(MySQLIntegrityConstraintViolationException e){
        e.printStackTrace();
        return new R(Code.exception_err,"不能注册重复的用户名或手机号");
    }
    //@ExceptionHandler 处理的是那种类型的异常
//    @ExceptionHandler(Exception.class)
//    @ResponseBody
//    public R excpe(Exception e){
//        //捕获异常信息，并打印到控制台
//        e.printStackTrace();
//        return new R(Code.exception_err,"服务器出小差了，请稍后再试");
//    }
}
